package com.kx.springmvc.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录拦截器
 * 需要实现HandlerInterceptor接口里面的默认方法
 * @ClassName MyLoginInterceptor
 * @Author Sun
 * @Date 2021/5/20 21:13
 */
@Component
public class MyLoginInterceptor implements HandlerInterceptor {

    /**
     * 在 controller 之前执行
     * @param request
     * @param response
     * @param handler
     * @return   true 代表放行,false 代表拦截,但是注意拦截只负责拦截,不负责返回其他数据,如果你需要返回其他数据,请自行返回
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //我们要判断用户有没有登录,首先我们得知道用户的登录信息放在什么地方
        //具体放在什么地方是我们自己觉得, 只要我们取的时候从对应的地方取就行了
        //假设此处我们放到了 session,用 user 这个名字保存的
        Object user = request.getSession().getAttribute("user");
        System.err.println("开始拦截了");
        return user != null;
    }

    /**
     * 在 controller 执行之后执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 在视图执行之后,一般用于释放资源等
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
